/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tpv;

/**
 * Clase para encapsular una fecha en el
 * formato dado por la práctica
 * @author alex952
 */
public class Fecha implements Comparable<Fecha>
{
    @Override
    public int compareTo(Fecha t)
    {
	if (this.dow.ordinal() < t.dow.ordinal())
	{
	    return -1;
	}
	else if (this.dow.ordinal() > t.dow.ordinal())
	{
	    return 1;
	}
	else
	{
	    if (this.hora < t.hora)
	    {
		return -1;
	    }
	    else if (this.hora > t.hora)
	    {
		return 1;
	    }
	    else
	    {
		if (this.minuto < t.minuto)
		{
		    return -1;
		}
		else if (this.minuto > t.minuto)
		{
		    return 1;
		}
		else
		{
		    return 0;
		}
	    }
	}
    }

    /**
     * Enumerado para distinguir el día de
     * la semana
     */
    public static enum Day
    {
	L, M, X, J, V, S, D
    }
    /**
     * Dia de la semana
     */
    private Day dow;
    /**
     * Hora y minuto de la venta
     */
    private Integer hora, minuto;

    /**
     * Constructor por defecto
     * @param dow Dia de la semana (enumerado)
     * @param hora Hora de la venta
     * @param minuto Minuto de la venta
     */
    public Fecha(String dow, Integer hora, Integer minuto)
    {
	if (dow.equals("L"))
	{
	    this.dow = Day.L;
	}
	else if (dow.equals("M"))
	{
	    this.dow = Day.M;
	}
	else if (dow.equals("X"))
	{
	    this.dow = Day.X;
	}
	else if (dow.equals("J"))
	{
	    this.dow = Day.J;
	}
	else if (dow.equals("V"))
	{
	    this.dow = Day.V;
	}
	else if (dow.equals("S"))
	{
	    this.dow = Day.S;
	}
	else if (dow.equals("D"))
	{
	    this.dow = Day.D;
	}

	this.hora = hora;
	this.minuto = minuto;
    }

    /**
     * Getter del día de la semana
     * de la venta
     * @return Dia de la semana
     * de la venta
     */
    public Day getDayOfWeek()
    {
	return dow;
    }

    /**
     * Getter de la hora de la venta
     * @return Hora de la venta
     */
    public Integer getHora()
    {
	return hora;
    }

    /**
     * Getter del minuto de la venta
     * @return Minuto de la venta
     */
    public Integer getMinuto()
    {
	return minuto;
    }

    public boolean isEnRango(Fecha a, Fecha b)
    {
	// a <= this <= b
	return a.compareTo(this) <= 0 && b.compareTo(this) >= 0;
    }

}
